// Copyright 2009 the Sputnik authors.  All rights reserved.
// This code is governed by the BSD license found in the LICENSE file.

/*---
info: First expression is evaluated first, and then second expression
es5id: 11.10.2_A2.4_T2
description: Checking with "throw"
---*/

//CHECK#1
function Test() {
    var x = function () { throw "x"; };
    var y = function () { throw "y"; };
    try {
       x() ^ y();
       throw new Test262Error('#1.1: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (x() ^ y()));
    } catch (e) {
       if (e === "y") {
         throw new Test262Error('#1.2: First expression is evaluated first, and then second expression');
       } else {
         if (e !== "x") {
           throw new Test262Error('#1.3: var x = function () { throw "x"; }; var y = function () { throw "y"; }; x() ^ y() throw "x". Actual: ' + (e));
         }
       }
    }
}

// preheat
const NUMBER_OF_PREHEAT = 1;
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}

ArkTools.jitCompileAsync(Test);
assert.sameValue(ArkTools.waitJitCompileFinish(Test), true, '[JIT] JIT disabled.');

// test
const NUMBER_OF_TEST = 1; // or 2
for (let i = 0; i < NUMBER_OF_PREHEAT; i++) {
    Test();
}
